package com.goodwill.androidtest.evaluate;


import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class CourseDeserializer implements JsonDeserializer<List<Course>>, JsonSerializer<List<Course>> {
    private Gson gson = new Gson();

    @Override
    public List<Course> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {


        if (json.isJsonNull()) {
            return null;
        }

        List<Course> courses = new ArrayList<>();

        if (json.isJsonArray()) {
            JsonArray jsonArray = json.getAsJsonArray();
            courses.addAll(gson.fromJson(jsonArray,
                    new TypeToken<ArrayList<Course>>() {
                    }.getType()));
        } else if (json.isJsonObject()) {
            JsonObject jsonObject = json.getAsJsonObject();
            courses.add(gson.fromJson(jsonObject, Course.class));
        }

        return courses;
    }

    @Override
    public JsonElement serialize(List<Course> src, Type typeOfSrc, JsonSerializationContext context) {
        return null;
    }
}
